1

Redis 是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型。

PS:除了散列类型,Redis的其他数据类型同样不支持数据类型嵌套。比如集合类型的每个元素都只能是字符串,不能是另一个集合或散列表等。

散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。
根据下面的命令,很容易理解。

1.赋值与取值

HSET key field value
HGET key field

HMSET key field value [field value ...]
HMGET key field [field ...]

HGATALL key

HSET 命令用来给字段赋值,HGET 命令用来获得字段的值。

redis> HSET car price 500
(integer) 1
redis> HSET car name BMW
(integer) 1
redis> HGET car name
"BMW"
PS:HSET 命令不区分插入和更新操作,当执行插入操作(即之前字段不存在)HSET 命令会返回 1,当执行更新操作(即之
前字段已经存在)HSET 命令会返回 0。更进一步,当键本身不存在时,HSET命令还会自动建立它。

当需要同时设置多个字段的值时,可以使用 HMSET 命令。

HMSET key field1 value1 field2 value2

相应的,HMSET 命令可以同时获得多个字段的值:

redis> HMSET car price name
1) "500"
2) "BMW"

如果想要获取键中所有字段和字段值却不知道键中有哪些字段时,应该使用 HGETALL 命令。

redis> HGETALL car
1) "price"
2) "500"
3) "name"
4) "BMW"

2.判断字段是否存在

HEXISTS key field

HEXISTS 命令用来判断一个字段是否存在,存在返回 1,反则返回 0(键不存在也会返回 0)

redis> HEXISTS car model
(integer) 0
redis> HSET car model C200
(integer) 1
redis> HEXISTS car model
(integer) 1

3.当字段不存在时赋值

HSETTNX key field value

如果字段已经存在,HSETTNX 命令将不执行任何操作。HSETTNX 命令是原子操作,不必担心竞态条件。

4.增加数字

HINCRBY key field increment

使字段值增加指定的整数。

redis> HINCRBY person score 60
(integer) 60

5.删除字段

HDEL key field [field ...]

HDEL 命令可以删除一个或者多个字段,返回值是被删除的字段的个数。

redis> HDEL car price
(integer) 1
redis> HDEL car price
(integer) 0

6.只获取字段名或字段值

HKEYS key
HVALS key

HKEYS 命令用来获取键中所有的字段名称

redis> HKEYS car
1) "name"
2) "model"

HVALS 命令用来获得键中所有字段值。

redis> HVALS car
1) "BMW"
2) "C200"

7.获得字段数量

HLEN key

redis>  HLEN car
(integer) 2

MurasakiSeiFu
51 声望4 粉丝

德以配位,命以己修。